MyBatis Generator 无法生成 selectByPrimaryKey、updateByPrimaryKey、deleteByPrimaryKey等主键操作方法 您所在的位置:网站首页 apache knox导致cpu很高 MyBatis Generator 无法生成 selectByPrimaryKey、updateByPrimaryKey、deleteByPrimaryKey等主键操作方法

MyBatis Generator 无法生成 selectByPrimaryKey、updateByPrimaryKey、deleteByPrimaryKey等主键操作方法

2023-06-26 14:20| 来源: 网络整理| 查看: 265

  SpringBoot 项目采用 MyBatis Generator 插件为表 tbl_onl_test 生成 Mapper 文件时,发现生成的文件比以往少了 selectByPrimaryKey、updateByPrimaryKey、deleteByPrimaryKey 等几个方法,对应的 xml 文件中同样也少了这几个,并且 xml 文件中的 resultMap 节点里主键 id 使用的是 result 标签,而不是id标签,现象如下所示。

  tbl_onl_test 表结构:

CREATE TABLE `tbl_onl_test` ( `test_id1` varchar(10) NOT NULL DEFAULT '', `test_id2` varchar(10) NOT NULL DEFAULT '', `test_nm` varchar(20) NOT NULL DEFAULT '', PRIMARY KEY (`test_id1`,`test_id2`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8

  生成的 Mapper 接口文件:

package com.test.dao.testonl; import com.test.common.entity.Test; public interface TestMapper { int insert(Test record); int insertSelective(Test record); }

  生成的 Mapper.xml 文件中的 resultMap:

  产生该现象的原因是:MySQL 数据库版本升级之后,插件没有识别出表格的主键信息。

  解决方法有2种:

降低 mysql-connector-java 版本,如修改为以下配置。 mysql mysql-connector-java 5.1.21 在 generator.xml 配置文件中,开启 jdbcConnection 节点里的 useInformationSchema 属性和 remarks 属性,配置如下。

  采用以上2种方法中的任意一种,新生成的文件中即会生成各个主键方法。

  新生成的 Mapper 接口文件:

package com.test.dao.testonl; import com.test.common.entity.Test; import com.test.common.entity.TestKey; public interface TestMapper { int deleteByPrimaryKey(TestKey key); int insert(Test record); int insertSelective(Test record); Test selectByPrimaryKey(TestKey key); int updateByPrimaryKeySelective(Test record); int updateByPrimaryKey(Test record); }

  新生成的 Mapper.xml 文件中的 resultMap:

  mysql 官网 https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-configuration-properties.html 对 useInformationSchema 属性给了一段解释:

useInformationSchema

When connected to MySQL-5.0.7 or newer, should the driver use the INFORMATION_SCHEMA to derive information used by DatabaseMetaData?

Default: false

Since version: 5.0.0

  当连接 5.0.7 以上的 mysql 版本时,要用这个 useInformationSchema 来获取 DatabaseMetaData 吗? 默认是 false,所以当项目中的 mysql 数据库迁移到高版本时,需要显式地配置为 true。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有